【MySQL进阶学习】子查询与索引的建立 您所在的位置:网站首页 mysql in 子查询不走索引 【MySQL进阶学习】子查询与索引的建立

【MySQL进阶学习】子查询与索引的建立

2024-07-11 12:31| 来源: 网络整理| 查看: 265

文章目录 子查询子查询返回单条单列子查询返回多条记录子查询返回多条记录多列查询 索引聚簇索引非聚簇索引索引的数据结构分类B+TREEHASH索引其他类型 索引的建立create index 语句创建索引alter table语句创建索引

子查询

子查询是一种嵌套在其他SQL(增、删、改、查)里的查询

子查询返回单条单列

子查询返回单条单列,显而易见,单行单列即为一个值,这个值可以用来当筛选当中的值使用,只不过得加上括号。

例: 查询“计算机工程系”有哪些专业。

SELECT MajorName FROM major WHERE DepartmentID = (SELECT DepartmentID FROM department WHERE DepartmentName = '计算机工程系');

在where里面,我们DepartmentID判断等于的,不是直接的一个值,而是用department筛选出来的一个值,从而进行再次的筛选。这就是我们所说的 子查询返回单条单列 其中

(SELECT DepartmentID FROM department WHERE DepartmentName = '计算机工程系')

在这里,符合DepartmentName = '计算机工程系'筛选出来,出来一个筛选出一个值,然后用于where筛选。

子查询返回多条记录

子查询返回多条记录,和子查询返回单条单列用法本质上是一样的,都是筛选出数据,然后再供使用。

例: 查询CourseID10101,ExamScore为98分的学生的学生信息。

SELECT * FROM student WHERE StuID = (SELECT StuID FROM score WHERE ExamScore = 98 AND CourseID = 10101);

**我们想要找到题目当中的数据,但是图中明显不是两个表,而且还需要筛选数据才能得到想要的表,所以我们就用到了 子查询返回多条记录 ,上面的代码,后面括号内的代码,是筛选过的StuID,从而再进行对studen表的筛选。CourseID10101,ExamScore为98分为筛选出来的数据,所以在表中,我们进行了ExamScore = 98 AND CourseID = 10101。 在 子查询返回多条记录 中,我们会使用到以下运算符:IN,ANY | SOME,ALL

in:代表集合,为存在于这个集合里面。any:图像化理解哈希表) 图像化理解哈希表

其他类型 r-tree:针对几何图形全文索引:针对大文本,比%模糊 索引的建立 create index 语句创建索引

格式:

CREATE [unique|fulltext|spatial] INDEX 索引名 [using btree|hash] ON 表名(字段名[(length)] [asc|desc] );

其中的可选为:

[unique|fulltext|spatial] :索引类型[using btree|hash]:索引的数据类型length:表示使用索引列的前多少个字符创建索引[asc|desc]:表示索引字段值的排序顺序,省略时默认为 asc 升序排列

例: 给score表中的StuiID建立索引 CREATE INDEX idx_stuid ON score(StuID);

问题来了,建立完索引之后,如何查看自己的索引,或者如何检查自己建立没建立索引呢?

语法如下: SHOW INDEX FROM 表名;

例如我们现在要查询studen表里面的索引: 索引查询 这是一个字段名建立索引的方法,还有就是,两个字段名一起建立索引,这里我们需要格外的注意字段名的顺序,不然的话,就会造成无法查询等一系列问题。 语法格式如下:

CREATE [unique|fulltext|spatial] INDEX 索引名 [using btree|hash] ON 表名(字段名[(length)],字段名[(length)] [asc|desc] );

由于和单个创建索引一样,这里就不一样详述了,切记一定要记住顺序问题。 如若用(字段名1,字段名2)两个字段名建立索引,则:

按字段名1单列查的问题。按字段名1,字段名2双列一起查的问题。不能解决按字段名2单列查的问题。

建立索引已经学会了,也学会了如何检查有没有索引,接下来该查看查询的时候是否使用索引了。

直接在select前面添加explain

对,就是这么简单,记住explain关键字就可以了。 例: explain关键字 从图中我们可以看出来,查询时没有使用索引,这是为什么呢? 因为用模糊搜索,前面带%的不使用索引。这个得记住,不然如果面试有咋办。

alter table语句创建索引

格式:

ALTER TABLE 表名 ADD INDEX [索引名] [索引类型](索引字段);

在其中有着多种形式,比如主键,唯一性,外键等,格式如下:

主键: ADD [constraint 约束名] PRIMARY KEY [索引类型](主键字段) 唯一性 ADD [constraint 约束名] UNIQUE [索引名] [索引类型](唯一键字段) 外键 ADD [constraint 约束名] FOREIGN KEY [索引名] (外键字段) REFERENCE...

部分笔记来自老师授课的教案:番茄发烧了

尾记:编程我也是初学者,难免有写错的地方,希望大家看完之后,发现错误可以评论出来,谢谢大家



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有